/*     */ package dm.jdbc.rsCache;
/*     */ 
/*     */ import dm.jdbc.desc.GlobalControlCfg;
/*     */ import dm.jdbc.driver.DmdbConnection_bs;
/*     */ import dm.jdbc.driver.DmdbInfo;
/*     */ import dm.jdbc.driver.DmdbResultSet_bs;
/*     */ import dm.jdbc.driver.DmdbStatement_bs;
/*     */ import java.sql.SQLException;
/*     */ import java.util.Collections;
/*     */ import java.util.HashMap;
/*     */ import java.util.LinkedList;
/*     */ import java.util.List;
/*     */ import java.util.Map;
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ public class DmdbCachedResultSetPool
/*     */ {
/*  25 */   static Map m_rsHashMap = Collections.synchronizedMap(new HashMap(100));
/*  26 */   static Map m_sqlMap = Collections.synchronizedMap(new HashMap(100));
/*  27 */   static List m_keyList = Collections.synchronizedList(new LinkedList());
/*  28 */   static long m_totalDataLen = 0L;
/*     */   
/*     */   private static long removeLast()
/*     */   {
/*  32 */     int size = m_keyList.size();
/*  33 */     if (size == 0) {
/*  34 */       return 0L;
/*     */     }
/*  36 */     DmdbResultSetKey rsKey = (DmdbResultSetKey)m_keyList.remove(size - 1);
/*  37 */     if (rsKey == null) {
/*  38 */       return 0L;
/*     */     }
/*  40 */     DmdbCachedResultSet crs = (DmdbCachedResultSet)m_rsHashMap
/*  41 */       .remove(rsKey);
/*  42 */     if (crs == null) {
/*  43 */       return 0L;
/*     */     }
/*  45 */     return crs.getDataLen();
/*     */   }
/*     */   
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   private static void refreshKeyList(DmdbResultSetKey rsKey)
/*     */   {
/*  55 */     m_keyList.remove(rsKey);
/*     */     
/*  57 */     m_keyList.add(0, rsKey);
/*     */   }
/*     */   
/*     */   private static void addSqlDbInfo(String guid, String curSch, String sql, DmdbInfo dbInfo)
/*     */   {
/*  62 */     String key = guid + "&" + curSch + "&" + sql;
/*  63 */     m_sqlMap.put(key, dbInfo.clone());
/*     */   }
/*     */   
/*     */   private static void removeSqlDbInfo(String guid, String curSch, String sql) {
/*  67 */     String key = guid + "&" + curSch + "&" + sql;
/*  68 */     m_sqlMap.remove(key);
/*     */   }
/*     */   
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   public static void addResultSet(DmdbResultSet_bs rs, String guid, String curSch, String sql, long[] tbIds, long[] tbTss, DmdbInfo dbInfo)
/*     */     throws SQLException
/*     */   {
/*  99 */     long dataLen = rs == null ? 0 : rs.getDataLen();
/* 100 */     long cacheSize = GlobalControlCfg.getRsCacheSize() * 1024 * 1024;
/*     */     
/* 102 */     while (m_totalDataLen + dataLen > cacheSize) {
/* 103 */       if (m_totalDataLen == 0L) {
/* 104 */         return;
/*     */       }
/* 106 */       m_totalDataLen -= removeLast();
/*     */     }
/*     */     
/* 109 */     addSqlDbInfo(guid, curSch, sql, dbInfo);
/*     */     
/* 111 */     DmdbResultSetKey rsKey = new DmdbResultSetKey(guid, curSch, sql, 
/* 112 */       (DmdbStatement_bs)rs.getStatement());
/* 113 */     refreshKeyList(rsKey);
/*     */     
/* 115 */     DmdbCachedResultSet crs = new DmdbCachedResultSet(rs, tbIds, tbTss);
/* 116 */     m_rsHashMap.put(rsKey, crs);
/*     */     
/* 118 */     m_totalDataLen += dataLen;
/*     */   }
/*     */   
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   public static DmdbResultSet_bs getResultSet(String guid, String curSch, String sql, DmdbStatement_bs stmt)
/*     */     throws SQLException
/*     */   {
/* 149 */     DmdbResultSetKey rsKey = new DmdbResultSetKey(guid, curSch, sql, stmt);
/*     */     
/* 151 */     DmdbCachedResultSet crs = (DmdbCachedResultSet)m_rsHashMap.get(rsKey);
/* 152 */     if (crs == null) {
/* 153 */       return null;
/*     */     }
/* 155 */     if (crs.refreshed((DmdbConnection_bs)stmt.getConnection())) {
/* 156 */       m_rsHashMap.remove(rsKey);
/* 157 */       m_keyList.remove(rsKey);
/*     */       
/* 159 */       removeSqlDbInfo(guid, curSch, sql);
/*     */       
/* 161 */       return null;
/*     */     }
/*     */     
/* 164 */     DmdbResultSet_bs rs = crs.getResultSet(stmt);
/* 165 */     refreshKeyList(rsKey);
/*     */     
/* 167 */     return rs;
/*     */   }
/*     */   
/*     */   public static DmdbInfo getDbInfo(String guid, String curSch, String sql) {
/* 171 */     String key = guid + "&" + curSch + "&" + sql;
/* 172 */     DmdbInfo dbInfo = (DmdbInfo)m_sqlMap.get(key);
/*     */     
/* 174 */     if (dbInfo == null) {
/* 175 */       return null;
/*     */     }
/* 177 */     return (DmdbInfo)dbInfo.clone();
/*     */   }
/*     */ }


/* Location:              D:\Program Files\DBMS_20150813\jdbc\Dm7JdbcDriver17.jar!\dm\jdbc\rsCache\DmdbCachedResultSetPool.class
 * Java compiler version: 2 (46.0)
 * JD-Core Version:       0.7.1
 */